#ifndef __HASHMAPDY_H_
#define __HASHMAPDY_H_

#include <string>

#define ElementType int//std::string

class HashMap
{
public:
    HashMap(int HashSize);
    ~HashMap();
    /* 插入 */
    void Insert(const std::string & key, ElementType value);
    /* 查找 */
    //只能用指针，因为返回的可能是数，也可能是空,但是int无法确定是不是非法值
    ElementType* Get(const std::string & key);  
    
    ElementType & operator[](const std::string& key);   //因为不会有非法值所以不用elementtype*，直接用引用更方便，还可以改值

    /* 删除 */
    void Remove(const std::string & key);

    void show();

    void showByKey();
    
private:
    struct Node
    {
        //初始化
        Node(const std::string & key,ElementType value)
        {
            this->key = key;
            this->data = value;
            next = nullptr;
        }
        std::string key;    //字符串
        ElementType data;
        Node * next;
    };
    int Hash(const std::string & key);
    int HashSize;
    Node ** array; //为啥

};

#endif